package com.liang.blog.system.service;

import com.liang.blog.model.BlogMenu;
import com.liang.blog.vo.menu.BlogMenuVo;
import com.liang.blog.vo.menu.MenuPermissionVo;
import com.liang.blog.vo.menu.MenuSelectVo;
import com.liang.blog.vo.menu.RouterVo;
import org.omg.CORBA.INVALID_TRANSACTION;

import java.util.List;
import java.util.Map;

/**
 * @Author：YanWenLiang
 * @Date:2023-08-17-16:52
 */
public interface BlogMenuService {

    /**
     * 根据父 id 获取菜单信息
     * @param uid
     * @return
     */
    List<BlogMenu> getBlogMenuByUid(Long uid);

    /**
     * 根据父 id 获取信息(作用于删除菜单)
     * @param uid
     * @return
     */
    List<BlogMenu> getBlogMenuByParentIdToDelete(Long uid);

    /**
     * 通过角色菜单中间表，获取菜单信息
     * @param roleId
     */
    List<MenuPermissionVo> getMenuByRoleIdAndMenuId(int roleId);

    /**
     * 构建前端路由
     * @param menuList
     * @return
     */
    List<RouterVo> buildRouter(List<BlogMenu> menuList);

    /**
     * 获取全部类型为目录和菜单的菜单
     * @return
     */
    List<BlogMenu> getMenuAll();

    /**
     * 通过父id获取
     * @param parentId
     * @return
     */
    List<BlogMenuVo> getBlogMenuAllByParentId(Long parentId);

    /**
     * 保存菜单
     * @param blogMenu
     * @return
     */
    int insertMenu(BlogMenu blogMenu);

    /**
     * 构建树结构菜单
     * @return
     */
    public List<BlogMenu> buildMenu(BlogMenu blogMenu);

    /**
     * 获取全部菜单信息，（id, parent_id, menu_name）
     * @return
     */
    List<MenuSelectVo>  getBlogMenuAll();

    /**
     * 修改菜单信息
     * @param menu
     * @return
     */
    int updateMenu(BlogMenu menu);

    /**
     * 获取全部菜单信息
     * @return
     */
    List<BlogMenu> getBlogMenuList(BlogMenu blogMenu);

    /**
     * 逻辑删除菜单
     * @param id
     * @return
     */
    int deleteMenu(Long id);

    /**
     * 获取全部菜单 id
     * @return
     */
    List<Long> getMenuIdAll();

}
